/**
 * 用户管理
 */
Ext.define('User', {
			extend : 'Ext.data.Model',
			fields : [{
						name : 'id',
						type : 'int'
					}, {
						name : 'name',
						type : 'string'
					}, {
						name : 'username'
					}, {
						name : 'sex',
						type : 'string'
					}, {
						name : 'mobilephone',
						type : 'string'
					}, {
						name : 'tel',
						type : 'string'
					}, {
						name : 'email',
						type : 'string'
					}, {
						name : 'birthday'
					}, {
						name : 'description'
					}, {
						name : 'qq'
					}, {
						name : 'age'
					}, {
						name : 'deptname'
					}]
		});
// 创建数据源
var store = Ext.create('Ext.data.Store', {
			model : 'User',
			pageSize : 20,
			proxy : {
				type : 'ajax',
				url : 'userAction!queryUserPage.action',
				reader : {
					type : 'json',
					root : 'pageList'
				}
			}
		});
var superDeptStore = Ext.create('Ext.data.TreeStore', {
			fields : ['id', 'name'],
			proxy : {
				type : 'ajax',
				url : 'deptAction!getTreeBypid.action'
			},
			root : {
				id : '1',
				name : '上海市质量监督局',
				expanded : true
			},
			// rootVisible : false,
			reader : {
				type : 'json'
			}
		});

var superDeptStoreEdit = Ext.create('Ext.data.TreeStore', {
			fields : ['id', 'name'],
			proxy : {
				type : 'ajax',
				url : 'deptAction!getTreeBypid.action'
			},
			root : {
				id : '1',
				name : '上海市质量监督局',
				expanded : true
			},
			rootVisible : false,
			reader : {
				type : 'json'
			}
		});

var grid = Ext.create('Ext.grid.Panel', {
	store : store,
	border : 0,
	selModel : Ext.create('Ext.selection.CheckboxModel'),
	stripeRows : true,
	tbar : [{
				xtype : 'button',
				text : '新增',
				iconCls : 'icon-add',
				handler : function() {
					userWin.setTitle('新增');
					userWin.show();
					userForm.getForm().findField('dept.tempid').setValue(1);
				}
			}, {
				xtype : 'button',
				text : '修改',
				iconCls : 'icon-edit',
				handler : function() {
					var selMode = grid.getSelectionModel();// 取得选择模式
					var model = selMode.getSelection();
					if (model.length == 1) {
						var raw = model[0].raw;
						editWin.setTitle('修改人员信息');
						editWin.show();
						editForm.getForm().findField('user.id')
								.setValue(raw.id);
						editForm.getForm().findField('user.name')
								.setValue(raw.name);
						editForm.getForm().findField('user.sex')
								.setValue(raw.sex);
						editForm.getForm().findField('user.mobilephone')
								.setValue(raw.mobilephone);
						editForm.getForm().findField('user.tel')
								.setValue(raw.tel);
						editForm.getForm().findField('user.email')
								.setValue(raw.email);
						var _birthday = raw.birthday;
						if (_birthday && _birthday.length > 0) {
							editForm.getForm().findField('user.birthday')
									.setValue(raw.birthday.substr(0, 10));
						}
						editForm.getForm().findField('user.description')
								.setValue(raw.description);
						editForm.getForm().findField('user.qq')
								.setValue(raw.qq);
						editForm.getForm().findField('user.fax')
								.setValue(raw.fax);
						// var roleids = ["1","7","8","9"];
						Ext.Ajax.request({
									url : 'userAction!queryRoleIds.action',
									params : {
										userid : raw.id
									},
									success : function(response) {
										var res = response.responseText;
										res = Ext.JSON.decode(res);
										res = res.roleidList;
										editForm.getForm()
												.findField('user.roles')
												.setValue(res);
									}
								});
						// editForm.getForm().findField('user.roles')
						// .setValue(roleids);
						editForm.getForm().findField('dept.tempid1')
								.setValue(raw.dept);
						/*
						 * editForm.getForm().findField('user.login')
						 * .setValue(raw.login);
						 */

					} else {
						Ext.Msg.alert('提示', '只能选择一项修改！');
					}

				}
			}, {
				xtype : 'button',
				text : '删除',
				iconCls : 'icon-delete',
				handler : function() {
					var selMode = grid.getSelectionModel();
					var model = selMode.getSelection();
					if (model[0]) {
						var ids = [];// 删除多个
						Ext.Array.each(model, function(item) {
									ids.push(item.raw.id);
								});
						Ext.Msg.show({
							title : '确认删除',
							buttons : Ext.MessageBox.OKCANCEL,
							msg : '确定删除选择项?',
							fn : function(btn) {
								if (btn == 'ok') {
									Ext.Ajax.request({
										url : 'userAction!delete.action?ids='
												+ ids,
										success : function(response) {
											Ext.Msg.show({
														title : '提示',
														msg : '删除成功！',
														buttons : Ext.Msg.OK,
														width : 300,
														fn : function() {
															store.reload();
														}
													});
										},
										failure : function(response, opts) {
											console
													.log('server-sidefailure withstatus code '
															+ response.status);
										}
									});
								}

							}
						});
					} else {
						Ext.Msg.alert('提示', '请选择要删除的数据行！');
					}
				}
			}],
	bbar : Ext.create('Ext.PagingToolbar', {
				pageSize : 20,// 每页20条
				store : store,
				displayInfo : true,
				plugins : Ext.create('Ext.ux.ProgressBarPager', {})
			}),
	columns : [{
				text : 'id',
				dataIndex : 'id',
				hidden : true
			}, {
				text : '姓名',
				remoteSort : true,
				dataIndex : 'name',
				width : 90
			}, {
				text : '用户名',
				remoteSort : true,
				dataIndex : 'username',
				width : 90
			}, {
				text : '性别',
				remoteSort : true,
				dataIndex : 'sex',
				width : 45
			}, {
				text : '年龄',
				remoteSort : true,
				dataIndex : 'age',
				width : 45
			}, {
				text : '手机号码',
				dataIndex : 'mobilephone',
				flex : 1
			}, {
				text : '电话号码',
				dataIndex : 'tel',
				flex : 1
			}, {
				text : 'E-mail',
				dataIndex : 'email',
				flex : 1
			}, {
				text : '单位',
				dataIndex : 'deptname',
				flex : 1
			}, {
				text : '备注',
				dataIndex : 'description',
				flex : 2
			}],
	listeners : {
		itemdblclick : function(dataview, record, item, index, e) {
		}
	}
});
Ext.tip.QuickTipManager.init();
var roleStore = new Ext.data.JsonStore({
			proxy : {
				type : 'ajax',
				url : 'roleAction!queryPage.action',
				reader : {
					type : 'json',
					root : 'pageList'
				}
			},
			fields : ['name', 'id']
		});
roleStore.load();

var roleStore1 = new Ext.data.JsonStore({
			proxy : {
				type : 'ajax',
				url : 'roleAction!queryPage.action',
				reader : {
					type : 'json',
					root : 'pageList'
				}
			},
			fields : ['name', 'id']
		});
roleStore1.load();
var roleSelector = Ext.create('Ext.ux.form.ItemSelector', {
			name : 'user.roles',
			store : roleStore,
			displayField : 'name',
			valueField : 'id',
			msgTarget : 'side',
			fromTitle : '未选角色',
			toTitle : '已选角色'
		});
var roleSelector1 = Ext.create('Ext.ux.form.ItemSelector', {
			name : 'user.roles',
			store : roleStore1,
			displayField : 'name',
			valueField : 'id',
			msgTarget : 'side',
			fromTitle : '未选角色',
			toTitle : '已选角色'
		});
// roleStore.load();
var sexStore = Ext.create('Ext.data.Store', {
			fields : ['id', 'name'],
			data : [{
						"id" : "1",
						"name" : "男"
					}, {
						"id" : "2",
						"name" : "女"
					}]
		});
var sexCombo = Ext.create('Ext.form.field.ComboBox', {
			fieldLabel : '性别',
			store : sexStore,
			renderTo : Ext.getBody(),
			name : 'user.sex',// 控件名称
			displayField : 'name',
			editable : false,
			valueField : 'name',// 实际值
			queryMode : 'local',
			value : '男',
			anchor : '90%',
			labelAlign : 'left',
			labelWidth : 60
		});
var sexCombo1 = Ext.create('Ext.form.field.ComboBox', {
			fieldLabel : '性别',
			store : sexStore,
			renderTo : Ext.getBody(),
			name : 'user.sex',// 控件名称
			displayField : 'name',
			editable : false,
			valueField : 'name',// 实际值
			queryMode : 'local',
			value : '男',
			anchor : '90%',
			labelAlign : 'left',
			labelWidth : 60
		});
// 地区数据
var areaStore = new Ext.data.JsonStore({
			proxy : {
				type : 'ajax',
				url : 'busiDictAction!getByType.action?type=8',
				reader : {
					type : 'json',
					root : 'list'
				}
			},
			fields : ['id', 'name']
		});
areaStore.load();
var areaCombobox = Ext.create('Ext.form.ComboBox', {
			fieldLabel : '所属区域<font color=red>*</font>',
			emptyText : '请选择...',
			labelAlign : 'left',
			allowBlank : false,
			store : areaStore,
			name : 'user.areaid',// 控件名称
			editable : false,
			labelWidth : 60,
			displayField : 'name',
			valueField : 'id'// 实际值
		});
var areaCombobox1 = Ext.create('Ext.form.ComboBox', {
			fieldLabel : '所属区域<font color=red>*</font>',
			emptyText : '请选择...',
			labelAlign : 'left',
			allowBlank : false,
			store : areaStore,
			labelWidth : 60,
			name : 'user.areaid',// 控件名称
			editable : false,
			displayField : 'name',
			valueField : 'id'// 实际值
		});
// ------------------------------------------新建修改部分--------------------------------
var userForm = Ext.create('Ext.form.Panel', {
			bodyPadding : 5,
			border : 0,
			autoScroll : true,
			url : 'userAction!saveOrUpdate.action',
			defaults : {
				anchor : '100%'
			},
			items : [{
				layout : 'hbox',
				bodyStyle : 'padding:5px 0px 5px 5px;border-width:0px 0px 0px 0px',
				defaults : {
					border : false,
					xtype : 'panel',
					flex : 1,
					layout : 'anchor'
				},
				items : [{
					defaultType : 'textfield',
					defaults : {
						anchor : '90%',
						labelAlign : 'left',
						labelWidth : 60
					},
					items : [{
								xtype : 'hiddenfield',
								name : 'user.id'
							}, {
								xtype : 'hiddenfield',
								name : 'user.dept'
							}, /*
								 * { xtype : 'hiddenfield', id : 'age', name :
								 * 'user.age' },
								 */{
								fieldLabel : '用户名<font color=red>*</font>',
								name : 'user.username',
								maxLength : 32,
								allowBlank : false
							}, {
								itemId : 'pass',
								name : 'user.password',
								anchor : '90%',
								labelWidth : 60,
								inputType : 'password',
								fieldLabel : '密码<font color=red>*</font>',
								allowBlank : false,
								blankText : '密码不能为空',
								minLength : 3,
								minLengthText : '密码的长度为[3-16]',
								maxLength : 16,
								maxLengthText : '密码的长度为[3-16]'
							}, {
								name : 'pass-cfrm',
								vtype : 'password',
								inputType : 'password',
								anchor : '90%',
								labelWidth : 60,
								initialPassField : 'pass',
								fieldLabel : '确认密码<font color=red>*</font>',
								allowBlank : false,
								blankText : '密码不能为空',
								minLength : 3,
								minLengthText : '密码的长度为[3-16]',
								maxLength : 16,
								maxLengthText : '密码的长度为[3-16]'
							}, {
								fieldLabel : '姓名<font color=red>*</font>',
								name : 'user.name',
								maxLength : 10,
								allowBlank : false
							}, sexCombo, {
								fieldLabel : '出生日期',
								name : 'user.birthday',
								xtype : 'datefield',
								format : 'Y-m-d',
								editable : false,
								onTriggerClick : function() {
									var dt1 = this;
									Ext.form.DateField.prototype.onTriggerClick
											.apply(dt1, arguments);
									if (Ext.isEmpty(dt1.clearBtn)) {
										this.clearBtn = new Ext.Button({
													text : '清除',
													handler : function() {
														dt1.setValue("");
														dt1.picker.hide();
														dt1.collapse();
													}
												});
										dt1.clearBtn
												.render(dt1.picker.todayBtn.container);
									}
								}
							}
					/*
					 * , { xtype : 'checkboxfield', name : 'user.login',
					 * inputValue : '1', fieldLabel : '系统用户' }
					 */
					]
				}, {
					defaultType : 'textfield',
					defaults : {
						anchor : '90%',
						labelAlign : 'left',
						labelWidth : 60
					},
					items : [{
								id : 'dept.tempid',
								fieldLabel : '单位<font color=red>*</font>',
								xtype : 'treepicker',
								store : superDeptStore,
								displayField : 'name',
								valueField : 'id',
								allowBlank : false
							}, {
								fieldLabel : '固定电话',
								maxLength : 20,
								name : 'user.tel'
							}, {
								fieldLabel : '传真',
								name : 'user.fax'
							}, {
								fieldLabel : '手机',
								name : 'user.mobilephone',
								maxLength : 20,
								regex : /^\d*$/,
								minLength : 11
							}, {
								fieldLabel : 'E-mail',
								name : 'user.email',
								maxLength : 30
							}, {
								fieldLabel : 'QQ号码',
								regex : /^\d*$/,
								name : 'user.qq'
							}]
				}]
			}, {
				layout : 'hbox',
				bodyStyle : 'padding:5px 0px 5px 5px;border-width:0px 0px 0px 0px',
				defaults : {
					border : false,
					xtype : 'panel',
					flex : 1,
					layout : 'anchor'
				},
				items : [{
							defaults : {
								layout : 'anchor',
								anchor : '90%',
								labelAlign : 'left',
								labelWidth : 60
							},
							items : [{
										fieldLabel : '备注',
										name : 'user.description',
										xtype : 'textarea',
										anchor : '95%',
										height : 50,
										maxLength : 200
									}]
						}]
			}, roleSelector]
		});

var userWin = Ext.create('Ext.window.Window', {
	title : '新增',
	autoHeight : true,
	width : 600,
	layout : 'fit',
	autoScroll : true,
	overflowX : 'auto',
	overflowY : 'auto',
	modal : true,
	closeAction : 'hide',
	closable : true,
	items : [userForm],
	listeners : {
		show : function() {
			userForm.getForm().reset();
		}
	},
	buttons : [{
		text : '提交',
		formBind : true, // only enabled once the form is
		handler : function() {
			var form = userForm.getForm();
			var tempid = form.findField('dept.tempid').getValue();
			form.findField('user.dept').setValue(tempid);
			var name = form.findField('user.username').getValue();
			Ext.Ajax.request({
						url : 'userAction!uniqueName.action?name=' + name,
						async : false,
						success : function(response) {
							var res = response.responseText;
							res = JSON.parse(res);
							var unique = res.unique;
							if (unique != true) {
								Ext.Msg.alert('提示', '用户名【' + name
												+ '】已存在，请使用其他用户名！');
								return false;
							} else {
								form.submit({
											success : function(form, action) {
												var msg = "新增成功！";
												Ext.Msg.show({
															title : '提示',
															msg : msg,
															buttons : Ext.Msg.OK,
															width : 300,
															fn : function() {
																store.reload();
															}
														});
												userWin.hide();
											}
										});
							}
						},
						failure : function(response, opts) {
							console.log('请求错误=' + response.status);
						}
					});

		}
	}, {
		text : '取消',
		handler : function() {
			userWin.close();
		}
	}],
	buttonAlign : 'center'
});

var editForm = Ext.create('Ext.form.Panel', {
			bodyPadding : 5,
			border : 0,
			autoScroll : true,
			url : 'userAction!saveOrUpdate.action',
			defaults : {
				anchor : '100%'
			},
			items : [{
				layout : 'hbox',
				bodyStyle : 'padding:5px 0px 5px 5px;border-width:0px 0px 0px 0px',
				defaults : {
					border : false,
					xtype : 'panel',
					flex : 1,
					layout : 'anchor'
				},
				items : [{
					defaultType : 'textfield',
					defaults : {
						anchor : '90%',
						labelAlign : 'left',
						labelWidth : 60
					},
					items : [{
								xtype : 'hiddenfield',
								name : 'user.id'
							}, {
								xtype : 'hiddenfield',
								name : 'user.dept'
							}, {
								fieldLabel : '姓名<font color=red>*</font>',
								name : 'user.name',
								maxLength : 10,
								allowBlank : false
							}, sexCombo1, {
								fieldLabel : '出生日期',
								name : 'user.birthday',
								xtype : 'datefield',
								format : 'Y-m-d',
								editable : false,
								onTriggerClick : function() {
									var dt1 = this;
									Ext.form.DateField.prototype.onTriggerClick
											.apply(dt1, arguments);
									if (Ext.isEmpty(dt1.clearBtn)) {
										this.clearBtn = new Ext.Button({
													text : '清除',
													handler : function() {
														dt1.setValue("");
														dt1.picker.hide();
														dt1.collapse();
													}
												});
										dt1.clearBtn
												.render(dt1.picker.todayBtn.container);
									}
								}
							}, {
								fieldLabel : '手机号码',
								name : 'user.mobilephone',
								maxLength : 20,
								regex : /^\d*$/,
								minLength : 11
							}, {
								fieldLabel : 'QQ号码',
								regex : /^\d*$/,
								name : 'user.qq'
							}/*
								 * , { xtype : 'checkboxfield', name :
								 * 'user.login', inputValue : '1', fieldLabel :
								 * '系统用户' }
								 */]
				}, {
					defaultType : 'textfield',
					defaults : {
						anchor : '90%',
						labelAlign : 'left',
						labelWidth : 60
					},
					items : [{
								id : 'dept.tempid1',
								fieldLabel : '单位<font color=red>*</font>',
								xtype : 'treepicker',
								store : superDeptStoreEdit,
								displayField : 'name',
								valueField : 'id',
								allowBlank : false
							}, {
								fieldLabel : '固定电话',
								maxLength : 20,
								name : 'user.tel'
							}, {
								fieldLabel : 'E-mail',
								name : 'user.email',
								maxLength : 30
							}, {
								fieldLabel : '传真',
								name : 'user.fax',
								maxLength : 30
							}]
				}]
			}, {
				layout : 'hbox',
				bodyStyle : 'padding:5px 0px 5px 5px;border-width:0px 0px 0px 0px',
				defaults : {
					border : false,
					xtype : 'panel',
					flex : 1,
					layout : 'anchor'
				},
				items : [{
							defaults : {
								layout : 'anchor',
								anchor : '90%',
								labelAlign : 'left',
								labelWidth : 60
							},
							items : [{
										fieldLabel : '备注',
										name : 'user.description',
										xtype : 'textarea',
										anchor : '95%',
										height : 50,
										maxLength : 200
									}]
						}]
			}, roleSelector1]
		});

var editWin = Ext.create('Ext.window.Window', {
	title : '新增',
	autoHeight : true,
	width : 600,
	layout : 'fit',
	autoScroll : true,
	overflowX : 'auto',
	overflowY : 'auto',
	modal : true,
	closeAction : 'hide',
	closable : true,
	items : [editForm],
	listeners : {
		show : function() {
			editForm.getForm().reset();
		}
	},
	buttons : [{
		text : '提交',
		formBind : true, // only enabled once the form is
		handler : function() {
			var form = editForm.getForm();
			var tempid = form.findField('dept.tempid1').getValue();
			form.findField('user.dept').setValue(tempid);
			var id = form.findField('user.id').getValue();

			Ext.Ajax.request({
						url : 'userAction!uniqueName.action?name=' + name
								+ '&uniqueId=' + id,
						async : false,
						success : function(response) {
							var res = response.responseText;
							res = JSON.parse(res);
							var unique = res.unique;
							if (unique != true) {
								Ext.Msg.alert('提示', '用户名【' + name
												+ '】已存在，请使用其他用户名！');
								return false;
							} else {
								form.submit({
											success : function(form, action) {
												var msg = "保存成功！";
												Ext.Msg.show({
															title : '提示',
															msg : msg,
															buttons : Ext.Msg.OK,
															width : 300,
															fn : function() {
																store.reload();
															}
														});
												editWin.hide();
											}
										});
							}
						},
						failure : function(response, opts) {
							console.log('请求错误=' + response.status);
						}
					});
		}
	}, {
		text : '取消',
		handler : function() {
			editWin.close();
		}
	}],
	buttonAlign : 'center'
});
// -----------------------------------新增修改结束---------------------------
Ext.onReady(function() {
			// alert(Ext.Date.dayNames);
			Ext.create('Ext.container.Viewport', {
						layout : 'fit',
						items : [grid]
					});
			store.load();
			// Add the additional 'advanced' VTypes
			Ext.apply(Ext.form.field.VTypes, {
						password : function(val, field) {
							if (field.initialPassField) {
								var pwd = field.up('form').down('#'
										+ field.initialPassField);
								return (val == pwd.getValue());
							}
							return true;
						},
						passwordText : '两次输入的密码不一致！'
					});
		});
